#pragma once

#include <sys/epoll.h>
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <string.h>
#include <assert.h>
#include <unistd.h>
#include <errno.h>

#include <iostream>
#include <sstream>
#include <thread>

/*将文件描述符设置为非阻塞*/
int setnonblocking(int fd);

/*将文件描述符fd上的EPOLLIN注册到epollfd指示的epoll内核事件表中。 参数enable_et 指定是否对fd采用ET模式*/
void addfd(int epollfd, int fd, int enable_et);

/*ET 模式的工作流程*/
void et(struct epoll_event* events, int number, int epollfd, int listenfd);


void setReuseAddr(int sockfd, bool on);

void setTcpNoDelay(int sockfd, bool on);

void setKeepAlive(int sockfd, bool on);

int getTid();
